#!/sbin/openrc-run
# control an instance of tinydns, without daemontools
# written for alpine linux - NBA April 2007

extra_commands="reload"

depend() {
	need net
	after firewall
}

# -- Statrup variables 
DAEMON=/usr/bin/tinydns
COMPILER=/usr/bin/tinydns-data

IFACE="${SVCNAME#*.}"
if [ -n "$IFACE" ] && [ "${SVCNAME}" != "tinydns" ]; then
	ROOT=${ROOT:-/var/cache/tinydns.$IFACE}
	VARRUN=${VARRUN:-/var/run/tinydns.$IFACE}
	DATADIR=${DATADIR:-/etc/tinydns.$IFACE}
else
	ROOT=${ROOT:-/var/cache/tinydns}
	VARRUN=${VARRUN:-/var/run/tinydns}
	DATADIR=${DATADIR:-/etc/tinydns}
fi


#-----------------------------------------------------------------
# Main program
reload() {
	local rc opwd="$opwd"
	UID=$(id -u tinydns)
	GID=$(id -g tinydns)

	# Create the $ROOT directory if necessary
	if [ ! -d "$ROOT" ]; then
		mkdir -p "$ROOT"
		chown $UID:$GID "$ROOT"
	fi 
	
	# If a file named "data" exists in the $ROOT dir
	# Then we just use it and ignore anything else
	# If the "data" file does not exist, we attempt
	# to build one out of the "zone files".  
	ebegin "Generating tinydns cache"
	rm -f "$ROOT/data"
	if [ -e $DATADIR/data ]; then
		ln -sf "$DATADIR/data" "$ROOT/data"
	else
		set -- $( find $DATADIR -type f )
		if [ $# -eq 0 ]; then
			eend 1 "Missing data or zone files in $DATADIR"
			return 1
		fi
		cat "$@" > "$ROOT/data"
	fi
	cd "$ROOT" || return 1
	[ -e data ] || rm -f data.cdb
	$COMPILER 
	rc=$?
	cd "$opwd"
	eend $rc
	return $rc
}

start() {
	# Always do a reload on start
	reload || return 1

	ebegin "Starting tinydns"
	if [ -z "$UID" ] || [ -z "$GID" ]; then
		eend 1 "tinydns user or group missing"
		return 1
	fi
	
	if [ -z "$IP" ]; then
		eend 1 "IP is not specified in /etc/conf.d/$SVCNAME"
		return 1
	fi
	
	start-stop-daemon --start --env "UID=$UID" --env "GID=$GID" \
		--env "ROOT=$ROOT" --env "IP=$IP" --pidfile ${VARRUN}.pid \
		--background --make-pidfile --exec $DAEMON 
	eend $?
}

stop() {
	ebegin "Stopping tinydns"
	start-stop-daemon --stop --pidfile ${VARRUN}.pid --exec $DAEMON
	eend $?
}

